home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
parallax
/
more_exa.tar
/
more
/
X
/
xfractal.p
< prev
next >
Wrap
Text File
|
1993-03-04
|
2KB
|
73 lines
SYSTEM fractal;
CONST maxlevel = 10;
low_val = 0.0;
high_val = 1.0;
maxnode = 2**maxlevel - 1;
leaf_end = maxnode;
leaf_start= (leaf_end+1) DIV 2;
leaf_num = leaf_start;
height = leaf_num DIV 3;
CONFIGURATION tree [1..maxnode];
CONNECTION child_l: tree[i] <-> tree[2*i].parent;
child_r : tree[i] <-> tree[2*i+1].parent;
SCALAR i,win : CARDINAL;
delta,xmax,xmin: REAL;
ch : CHAR;
VECTOR x, low, high : REAL;
pos : CARDINAL;
PROCEDURE Gauss(): VECTOR REAL;
(* random number with Gaussian distribution *)
CONST N = 4;
GA= SQRT(3.0*FLOAT(N));
GF= 2.0*GA / (FLOAT(N)*FLOAT(MAX(INTEGER)));
SCALAR i : INTEGER;
VECTOR sum: REAL;
BEGIN
sum:=0.0;
FOR i:=1 TO N DO sum:= sum + FLOAT(VIRandom()) END;
RETURN (GF*sum - GA)
END Gauss;
PROCEDURE MidPointRec(SCALAR delta: REAL; SCALAR level: INTEGER);
BEGIN
PARALLEL [2**(level-1) .. 2**level - 1] (* select current tree level *)
x := 0.5 * (low + high) + delta*Gauss();
IF level < maxlevel THEN
SEND tree.child_l (low) TO tree.parent(low); (* values for children *)
SEND tree.child_l (x) TO tree.parent(high);
SEND tree.child_r (x) TO tree.parent(low);
SEND tree.child_r (high) TO tree.parent(high);
END;
ENDPARALLEL;
END MidPointRec;
BEGIN (* main *)
PARALLEL
low := low_val; (* starting values *)
high := high_val;
x := 0.0;
ENDPARALLEL;
FOR i:=1 TO maxlevel DO
delta := 0.5 ** (FLOAT(i)/2.0);
MidPointRec(delta,i);
END;
win := OpenAbswindow(leaf_num, height);
SetColor(COLOR(0,0,0)); (* black *)
xmin := REDUCE.min(x);
xmax := REDUCE.max(x);
PARALLEL [leaf_start..leaf_end]
pos := height - TRUNC( FLOAT(height-1)* (x-xmin)/(xmax-xmin) );
SetPixel(DIM1-leaf_start+1, pos);
ENDPARALLEL;
WriteString("Press RETURN for termination"); WriteLn;
Read(ch);
CloseWindow(win);
END fractal.